package model;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;


@Entity
public class SaidaProduto {

	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	private int id;
	private double totalItens;
	private double totalSaida;

	@Temporal(TemporalType.TIMESTAMP)
	private Date dataCadastro;
	@Temporal(TemporalType.TIMESTAMP)
	private Date dataAlteracao;
	@Temporal(TemporalType.TIMESTAMP)
	private Date dataSaida;
	@ManyToOne(cascade=CascadeType.ALL, fetch=FetchType.LAZY)
	private Cliente cliente;
	@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY, mappedBy="saida")
	private List<ItemSaida> itensSaida = new ArrayList<ItemSaida>();
	
	
	public SaidaProduto() {
		setDataCadastro(new Date());
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public double getTotalItens() {
		return totalItens;
	}
	public void setTotalItens(double totalItens) {
		this.totalItens = totalItens;
	}
	public double getTotalSaida() {
		return totalSaida;
	}
	public void setTotalSaida(double totalSaida) {
		this.totalSaida = totalSaida;
	}
	public Date getDataCadastro() {
		return dataCadastro;
	}
	public void setDataCadastro(Date dataCadastro) {
		this.dataCadastro = dataCadastro;
	}
	public Date getDataAlteracao() {
		return dataAlteracao;
	}
	public void setDataAlteracao(Date dataAlteracao) {
		this.dataAlteracao = dataAlteracao;
	}
	public Date getDataSaida() {
		return dataSaida;
	}
	public void setDataSaida(Date dataSaida) {
		this.dataSaida = dataSaida;
	}
	public Cliente getCliente() {
		return cliente;
	}
	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}
	public List<ItemSaida> getItensSaida() {
		return itensSaida;
	}
	public void setItensSaida(List<ItemSaida> itensSaida) {
		for (ItemSaida item : itensSaida) {
			addItem(item.getProduto(), item.getQuantidade());
		}
	}
	
	public void addItem(Produto produto, double quantidade) {
		ItemSaida item = new ItemSaida();
		item.setQuantidade(quantidade);
		item.setSaida(this);
		item.setProduto(produto);
		this.itensSaida.add(item);
		
		produto.setEstoque(produto.getEstoque()-quantidade);
		
		setTotalItens(getTotalItens()+quantidade);
		setTotalSaida(getTotalSaida()+(quantidade*produto.getValorVenda()));
		
	}

}
